Czym jest Blok Funkcyjny FB?
Podczas tworzenia programu PLC często zdarza się, że pewne fragmenty kodu powtarzają się w programie lub konieczne jest użycie funkcji niedostępnej w standardowym zestawie.
W obu takich przypadkach warto sięgnąć po bloki funkcyjne (FB).
Blok funkcyjny (FB) to modułowa jednostka programu w sterowniku PLC, zawierająca powtarzalny kod wraz z danymi wewnętrznymi. Dzięki temu można go wielokrotnie wywoływać w programie, a każda jego wersja działa niezależnie, przechowując własne zmienne. Takie podejście zwiększa przejrzystość kodu, ułatwia konserwację i minimalizuje ryzyko błędów. Na bazie jednego bloku funkcyjnego można tworzyć różne jego reprezentacje (instancje), które generują odmienne wyniki w zależności od parametrów wejściowych. Bloki te często wykorzystuje się do sterowania urządzeniami, takimi jak napędy, zawory czy roboty, które zazwyczaj występują w dużej liczbie w aplikacjach, wymagając zachowania indywidualnych stanów dla każdego wywołania.
Etapy tworzenia i wykorzystania Bloku Funkcyjnego?
-
Definicja bloku funkcyjnego – Utwórz nowy blok funkcyjny (FB) w środowisku programistycznym sterownika PLC.
- Realizacja algorytmu – Zaprogramuj wewnętrzną logikę bloku, definiując wejścia, wyjścia oraz zmienne wewnętrzne.
- Deklaracja instancji – Stwórz egzemplarz bloku w programie i przypisz mu unikalne dane, czyli „kopię” bloku działającą z konkretnymi wartościami.
- Wywołanie bloku – Dodaj wywołanie bloku w kodzie sterownika, konfigurując jego parametry, aby blok realizował swoje zadanie, np. sterowanie napędem.
- Zarządzanie danymi – Upewnij się, że każda instancja przechowuje swoje własne wartości zmiennych, co zapewnia jej niezależność.
- Ponowne użycie i optymalizacja – Wykorzystaj blok funkcyjny w różnych miejscach programu, dostosowując kod w celu poprawy wydajności.
1. Definicja Bloku Funkcyjnego w AutoShop
Aby stworzyć nowy blok funkcyjny:
-
- W drzewie zarządzania projektem rozwiń węzeł „Programming”.
- Kliknij prawym przyciskiem myszy „Function Block (FB)” lub folder pod nim i wybierz „New”.
- W oknie dialogowym nadaj nazwę blokowi i wybierz język jego programowania.
- Kliknij „OK”. Blok funkcyjny zostanie utworzony.
2. Tworzenia algorytmu działania Bloku Funkcyjnego
Bloki funkcyjne można tworzyć za pomocą języków programowania Schemat drabinkowy (LAD) lub Tekst strukturalny (LiteST).
W bloku funkcyjnym (FB) można wywoływać zarówno inne bloki funkcyjne (FB), jak i funkcje (FC), przy czym zagnieżdżenie wywołań jest możliwe do 8 poziomów.
-
Interfejs edycji Bloku Funkcyjnego
- posiada dodatkowe okna dla definicji zmiennych lokalnych Bloku Funkcyjnego oraz jego danych wejściowych i wyjściowych.
-
Okno definicji zmiennych oraz danych wejściowych i wyjściowych.
-
Opis tabeli definicji zmiennych Bloku Funkcyjnego
-
- I/O Type: Typ zmiennej
Typ zmiennej | Nazwa zmiennej | Opis |
---|---|---|
IN | wejściowa | Parametr IN jest przekazywany do bloku funkcyjnego przez program wywołujący. Służy jako dane wejściowe, które mogą być używane wewnątrz bloku, ale nie mogą być w nim modyfikowane. |
OUT | wyjściowa | Zmienna OUT służy do przekazywania wartości z bloku funkcyjnego do programu wywołującego. Blok funkcyjny modyfikuje tę zmienną wewnętrznie, a jej zaktualizowana wartość jest zwracana na zewnątrz, aby mogła być wykorzystana w dalszej części programu. |
INOUT | wejściowo-wyjściowa | Zmienna INOUT może być przekazana do bloku funkcyjnego podczas jego wywołania i modyfikowana zarówno wewnątrz bloku, jak i na zewnątrz, ponieważ odnosi się bezpośrednio do oryginalnej wartości zmiennej użytej w wywołaniu. |
VAR | lokalna | Zmienna VAR bloku funkcyjnego jest zmienną lokalną. Jest dostępna tylko w obrębie tego konkretnego bloku i nie może być odczytywana ani modyfikowana z zewnątrz. Każda instancja bloku funkcyjnego posiada swoją własną, niezależną kopię tej zmiennej. |
-
- Name: Nazwa zmiennej.
- Data Type: Typ danej, np. BOOL, INT, REAL, STRING.
- Initial Value: Wartość początkowa zmiennej.
- Power Down Hold: Zachowanie lub zerowanie wartości zmiennej po powrocie zasilania sterownika (Retained lub Non Retained).
Oprócz zmiennych lokalnych, program bloku funkcyjnego może również korzystać z rejestrów sterownika, takich jak np. M8000, które pełnią rolę zmiennych globalnych dostępnych w całym programie.
-
Przykład kodu wewnątrz bloku funkcyjnego - Licznik zdarzeń.
Poniżej znajduje się przykład bloku funkcyjnego utworzonego w języku drabinkowym, który zlicza zdarzenia (np. impulsy).
Po osiągnięciu przez licznik określonej liczby impulsów zadawanych z jego wejścia (bitu o nazwie Counter), aktywowany zostaje bit wyjściowy bloku, oznaczony jako Q.
3. Tworzenia instancji Bloku Funkcyjnego
Po skompilowaniu programu funkcjonalnego bloku (FB), należy go utworzyć jako instancję, aby móc go wykorzystać w programie:
Metoda 1:
Wprowadź nazwę FB w schemacie drabinkowym i dodaj nazwę instancji.
Metoda 2:
Wprowadź jednocześnie nazwę FB oraz nazwę instancji.
Po utworzeniu instancji bloku funkcyjnego (FB), dostosuj parametry tej instancji w zgodzie z wymaganiami programu, aby poprawnie wywołać stworzony blok funkcyjny.
Metoda 3:
Kliknij dwukrotnie instrukcję FB w panelu „Toolbox” i dodaj ją do schematu drabinkowego. Następnie wprowadź nazwę instancji w instrukcji nad graficzną reprezentacją bloku funkcyjnego, a następnie dokończ definicję parametrów FB.
4. Wywołanie Bloku Funkcyjnego
Po utworzeniu instancji bloku funkcyjnego, jego wejście En jest połączone z częścią programu (siecią drabinkową). Kiedy wejście En jest WŁĄCZONE, program bloku funkcyjnego działa, a jego wyjście zmienia się w zależności od stanu wejść i wewnętrznych ustawień bloku. Gdy wejście En jest WYŁĄCZONE, program bloku nie działa, a wyjście nie jest aktualizowane
Przykład aktywowania i wstrzymania wykonywania bloku funkcyjnego:
Gdy linia zasilająca bloku funkcyjnego licznika jest WŁĄCZONA, blok funkcyjny jest wykonywany.
Wyjście Q zwiększa się o 1, gdy na wejściu Counter pojawia się sygnał, tzw. zbocze narastające.
Gdy linia zasilająca bloku licznika jest WYŁĄCZONA, blok funkcyjny nie jest wykonywany.
Wyjście Q nie jest odświeżane, nawet wtedy gdy na wejściu Counter pojawiają się zmiany sygnału.
5. Eksportowanie Bloku Funkcyjnego
Blok funkcyjny można zapisać jako część biblioteki (enkapsulować), co pozwala na ponowne wykorzystanie go w innych projektach po wcześniejszej edycji i przetestowaniu.
-
- Kliknij prawym przyciskiem myszy „Function Block (FB)” w sekcji „Programming” i wybierz „Export FB”.
- Wybierz blok funkcyjny, ustaw wersję i zdecyduj, czy kod źródłowy ma być widoczny.
-
Wybierz ścieżkę zapisu w „Export Path” i kliknij „OK”. Wygenerowany plik zostanie zapisany w formacie .fe.
Uwaga: Zaszyfrowane bloki funkcyjne oraz bloki wywołujące zaszyfrowane funkcje nie mogą być eksportowane.
- Kliknij prawym przyciskiem myszy „Function Block (FB)” w sekcji „Programming” i wybierz „Export FB”.
5. Importowanie Bloku Funkcyjnego
Po wyeksportowaniu bloku można go zaimportować np. w innej aplikacji.
Metoda 1:
Kliknij prawym przyciskiem myszy „Function Block (FB)” w sekcji „Programming” i wybierz „Import FB”. Ta metoda pozwala na import bloków z widocznym kodem źródłowym.
Metoda 2:
Kliknij prawym przyciskiem myszy „Library” w panelu „Toolbox” i wybierz „Import FB”. Ta metoda obsługuje bloki z widocznym i niewidocznym kodem źródłowym.
Zaimportowane bloki funkcyjne mogą być bezpośrednio używane w nowych projektach w środowisku AutoShop Inovance. Aby edytować widoczny kod źródłowy bloku, należy najpierw zaimportować go do projektu poprzez opcję „Programming”.
Podsumowanie
Dzięki zastosowaniu bloków funkcyjnych programowanie PLC staje się bardziej efektywne, elastyczne i łatwiejsze w utrzymaniu. Bloki funkcyjne umożliwiają grupowanie powtarzających się operacji i logiki w modułach, które mogą być wielokrotnie wykorzystywane w różnych częściach projektu. To prowadzi do uproszczenia kodu, ponieważ nie trzeba każdorazowo implementować tych samych funkcji, a jedynie odwołać się do odpowiednich bloków. Taka struktura pozwala również na łatwiejsze zarządzanie i debugowanie kodu, ponieważ poszczególne bloki są odizolowane, a wszelkie zmiany w jednym bloku automatycznie wpływają na wszystkie instancje tego bloku w projekcie.
Korzystając z powyższych wskazówek, proces tworzenia i zarządzania projektami w oprogramowaniu narzędziowym AutoShop Inovance staje się bardziej zoptymalizowany. Używanie bloków funkcyjnych prowadzi do krótszego kodu, co sprawia, że programowanie jest bardziej zwięzłe i mniej podatne na błędy. Skrócony kod oznacza także mniejsze ryzyko pomyłek oraz szybsze wprowadzanie zmian w projekcie. Dzięki tej modularnej metodzie programowania, każdy blok może być łatwo testowany i edytowany bez konieczności ingerencji w resztę programu, co upraszcza proces jego utrzymania w dłuższym okresie.